﻿using System.Linq;
using System.Collections.Generic;

namespace Watson.Msrc
{
    internal static class CVE_2019_1130
    {
        private const string name = "CVE-2019-1130";

        public static void Check(VulnerabilityCollection vulnerabilities, int buildNumber, List<int> installedKBs)
        {
            var supersedence = new List<int>();

            switch (buildNumber)
            {
                case 10240:

                    supersedence.AddRange(new int[] {
                        4507458, 4512497, 4517276, 4522009, 4520011,
                        4524153, 4525232, 4530681, 4534306, 4537776,
                        4540693, 4550930, 4556826, 4561649, 4567518,
                        4565513, 4571692, 4577049
                    });

                    break;

                case 14393:

                    supersedence.AddRange(new int[] {
                        4507460, 4507459, 4512495, 4512517, 4516044,
                        4516061, 4522010, 4519998, 4524152, 4525236,
                        4530689
                    });

                    break;

                case 15063:

                    supersedence.AddRange(new int[] {
                        4507460, 4507459, 4512495, 4512517, 4516044,
                        4516061, 4522010, 4519998, 4524152, 4525236,
                        4530689
                    });

                    break;

                case 16299:

                    supersedence.AddRange(new int[] {
                        4507455, 4507465, 4512494, 4512516, 4516066,
                        4522012, 4520004, 4520006, 4524150, 4525241,
                        4530714, 4534276, 4534318, 4537789, 4537816,
                        4540681, 4541330, 4554342, 4550927, 4556812,
                        4561602, 4567515, 4565508, 4571741, 4577041
                    });

                    break;

                case 17134:

                    supersedence.AddRange(new int[] {
                        4507435, 4507466, 4512501, 4512509, 4516045,
                        4516058, 4522014, 4519978, 4520008, 4524149,
                        4525237, 4530717, 4534293, 4534308, 4537762,
                        4537795, 4540689, 4541333, 4554349, 4550922,
                        4550944, 4556807, 4561621, 4567514, 4565489,
                        4571709, 4577032
                    });

                    break;

                case 17763:

                    supersedence.AddRange(new int[] {
                        4507469, 4505658, 4511553, 4512534, 4512578,
                        4522015, 4519338, 4520062, 4524148, 4523205,
                        4530715, 4534273, 4534321, 4532691, 4537818,
                        4538461, 4541331, 4554354, 4549949, 4550969,
                        4551853, 4561608, 4567513, 4558998, 4559003,
                        4565349, 4571748, 4570333, 4577069
                    });

                    break;

                case 18362:

                    supersedence.AddRange(new int[] {
                        4507453, 4505903, 4512508, 4512941, 4515384,
                        4517211, 4522016, 4517389, 4522355, 4524147,
                        4524570, 4530684, 4528760, 4532695, 4532693,
                        4535996, 4540673, 4541335, 4551762, 4554364,
                        4549951, 4550945, 4556799, 4560960, 4567512,
                        4565483, 4559004, 4565351, 4566116, 4574727,
                        4577062
                    });

                    break;

                default:
                    return;
            }

            if (supersedence.Intersect(installedKBs).Any())
            {
                vulnerabilities.SetAsVulnerable(name);
            }
        }
    }
}